// 原型中共用方法
import RegList from './reg'
import Vue from 'vue'
export default {
	to(url, type = 'navigateTo') {
		uni[type]({
			url
		})
	},
	toast(title, icon = 'none', fn) {
		if (typeof icon === 'function') {
			fn = icon
		}
		// // #ifdef APP-PLUS
		// plus.nativeUI.toast(`${title}`);
		// // #endif
		// // #ifndef APP-PLUS
		// uni.showToast({
		// 	icon,
		// 	title
		// })
		// // #endif
		
		uni.showToast({
			icon,
			title
		})
		setTimeout(() => {
			if (typeof fn === 'function') fn.call(this)
		}, 1500)
	},
	// 复制文本
	copy(value, showText = '复制成功') {
		const that = this
		return new Promise((res, rej) => {
			uni.setClipboardData({
				data: value,
				showToast: false,
				success: () => {
					if (showText !== false) that.toast(showText)
					res()
				},
				fail() {
					if (showText !== false) that.toast('复制失败')
					rej('复制失败')
				}
			});
		})
	},
	
	// 设置获取缓存
	data(prop, value) {
		if (typeof value !== 'undefined') {
			return uni.setStorageSync(prop, value)
		}
		
		return uni.getStorageSync(prop)
	},
	
	/**
	 * @param {Object} verify 验证规则：字符串，函数，内置验证数组
	 * @param {Object} value 需要验证的值
	 */
	
	verify(verify, value) {
		let error = ''
		if (typeof verify === 'string') {
			error = this.verifyStr(verify, value)
		} else if (uni.$u.test.array(verify)) {
			// 数组
			for (let v of verify) {
				if (RegList[v]) {
					error = this.verifyStr(`-1%-1%${RegList[v].reg}~${RegList[v].error}`, value)
					if (error) return error
				}
			}
		} else if (typeof verify === 'function') {
			const err = verify(value)
			if (err) {
				error = err || ''
			}
		}

		return error
	},
	
	/**
	 * @param {Object} verifyStr 验证规则 -1%-1%-1  第一个规则是为空校验（必须为0~xxx），第二个为字符长度校验x.y~字符长度必须大于x小于y，第三个正则校验 （提示之间用~分隔, -1表示不验证）
	 * @example 
	 * -1%-1%-1	不验证
	 * 0~不能为空%-1%-1	验证不为空
	 * -1%5.10~必须为5-10个字符%-1	验证字符数量5-10
	 * -1%-1%^1[34578]\\d{9}$~手机号格式不正确	正则验证
	 * @param {Object} value 需要验证的值
	 */
	
	verifyStr(verifyStr = '-1%-1%-1', value) {
		value = `${value}`
		let arr = verifyStr.split('%')
		// 为空校验
		let error = ''
		if (arr[0] != -1) {
			const str = arr[0].split('~')
			if (str[0] === '0' && value.trim() === '') {
				error = str[1] ? str[1] : '不能为空'
				
				return error
			}
		}
		// 长度校验
		if (arr[1] != -1) {
			const str = arr[1].split('~')
			const len = str[0].split('.').map(s => Number(s))
			if (value.length < len[0] || value.length > len[1]) {
				error = str[1] ? str[1] : '不能为空'
				return error
			}
		}
		// 正则校验
		if (arr[2] != -1) {
			const str = arr[2].split('~')
			const reg = new RegExp(str[0])
			if (!reg.test(value)) {
				error = str[1] ? str[1] : '不能为空'
				return error
			}
		}

		return error
	},
	
	// 字符串多个验证, 必须为 { value: '', verify格式 }
	verifyMultiple(obj) {
		let err = ''
		for (let k in obj) {
			obj[k].verify = obj[k].verify || '-1%-1%-1'
			err = this.verifyStr(obj[k].verify, obj[k].value)
			if (err) {
				break
			}
		}
		
		return err
	},
	
	// 上传图片
	upload(temp, name, success = () => {}, err = () => {}) {
		const that = this
		if (typeof name === 'function') {
			err = success
			success = name
			name = 'file'
		}
		
		return uni.uploadFile({
			url: uni.esConfig.UPLOAD_URL,
			filePath: temp,
			name,
			success(res) {
				const {
					statusCode,
					data
				} = res
				if (statusCode === 200) {
					let result = JSON.parse(data)
					if (result[that.result_code] === that.result_ok) {
						success(result[that.result_data])
					} else {
						err(result[that.result_msg])
					}
				} else {
					err('上传失败')
				}
			}
		})
	}
	
}
